﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Innvoice.Logica.GestorDB;
using Innvoice.Logica.GestorObject.Articulo;
using Innvoice.Ws.Clientes.Reportes;

namespace Innvoice.Ws.Articulos.Articulos
{
    /// <summary>
    /// Lógica de interacción para MostrarArticulo.xaml
    /// </summary>
    public partial class MostrarArticulo : Window
    {
        private ArticuloDB articuloDB = new ArticuloDB();
        private List<Articulo> articulosActivos = new List<Articulo>();
        private List<Articulo> articulosDesactivados = new List<Articulo>();
         
        public MostrarArticulo()
        {
            InitializeComponent();
        }

        #region Windows Methods

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            articulosActivos = articuloDB.ObtenerArticulosSegunEstado(1);
            articulosDesactivados = articuloDB.ObtenerArticulosSegunEstado(0);

            articuloDataGridActivos.Items.Clear();
            articuloDataGridActivos.ItemsSource = articulosActivos;

            articuloDataGridDesactivados.Items.Clear();
            articuloDataGridDesactivados.ItemsSource = articulosDesactivados;
        }

        private void btnAgregar_Click(object sender, RoutedEventArgs e)
        {
            AgregarElemento();
        }

        private void btnModificar_Click(object sender, RoutedEventArgs e)
        {
            ModificarElemento();
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.Key.ToString().ToUpper())
            {
                case "F1":
                    AgregarElemento();
                    break;
                case "F2":
                    ModificarElemento();
                    break;
                case "F3":
                    DesactivarElemento();
                    break;
                case "F4":
                    Listar();
                    break;
                case "F12":
                    this.Close();
                    break;
                case "ESCAPE":
                    this.Close();
                    break;
                default:
                    return;

            }
        }

        private void btnCerarVentana_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnDesactivar_Click(object sender, RoutedEventArgs e)
        {
            DesactivarElemento();
        }

        #endregion

        #region Auxiliar Methods

        private void AgregarElemento()
        {
            AltaArticulo altaArticulo = new AltaArticulo();
            altaArticulo.Show();
        }

        private void ModificarElemento()
        {

            if (articuloDataGridActivos.SelectedItems.Count == 1)
            {
                Articulo auxArticulo = (Articulo)articuloDataGridActivos.SelectedItem;
                Articulo articulo = articuloDB.ObtenerArticulo(auxArticulo.Codigo);
                ModificarArticulo modificarArticulo = new ModificarArticulo(articulo);
                modificarArticulo.Show();
            }
            else if (articuloDataGridActivos.SelectedItems.Count < 1)
            {
                MessageBox.Show("Seleccione el elemento a modificar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                MessageBox.Show("Debe seleccionar SOLO UN articulo a modificar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        //Borra el elemento seleccionado
        private void DesactivarElemento()
        {
            if (articuloDataGridActivos.SelectedItems.Count == 1)
            {
                Articulo auxArticulo = (Articulo)articuloDataGridActivos.SelectedItem;
                Articulo articulo = articuloDB.ObtenerArticulo(auxArticulo.Codigo);

                List<SubArticulo> subArticulosDelArticulo = articuloDB.ObtenerSubArticulosConDescripcion(auxArticulo.Codigo);

                int cantidadSubArticulos = subArticulosDelArticulo.Count;

                string resultadoParaMessageBoxInicial = "Realmente desea desactivar el Articulo " + articulo.Descripcion + " ?\n";

                string resultadoMessageBoxFinal = resultadoParaMessageBoxInicial;

                if (cantidadSubArticulos > 0)
                {
                    string resultadoParaMessageBox = "\n";
                    int contador = 1;
                    foreach (SubArticulo item in subArticulosDelArticulo)
                    {
                        resultadoParaMessageBox = resultadoParaMessageBox + contador + " --> " + item.Descripcion + " \n";
                        contador++;
                    }
                    resultadoParaMessageBox = resultadoParaMessageBox + "\n";

                    resultadoMessageBoxFinal = resultadoMessageBoxFinal + "No estaran disponibles los siguientes Sub Articulos si desactiva el Articulo: " + articulo.Descripcion + "\n" + resultadoParaMessageBox;

                }

                MessageBoxResult resultadoOK = MessageBox.Show(resultadoMessageBoxFinal, "Desactivar Articulo", MessageBoxButton.YesNoCancel, MessageBoxImage.Exclamation);

                switch (resultadoOK.ToString())
                {
                    case "Yes":
                        articuloDB.DesactivarArticulo(articulo);
                        break;
                    default:
                        return;
                }
                
            }
            else if (articuloDataGridActivos.SelectedItems.Count < 1)
            {
                MessageBox.Show("Seleccione el elemento a borrar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                MessageBox.Show("Debe seleccionar SOLO UN Articulo a borrar", "Atencion", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void Listar()
        {
            string miRdlc = "Innvoice.Ws.Articulos.Reportes.RptArticulo.rdlc";
            string miNameDataSet = "DataSetArticulo";
            List<Articulo> listaArticulo = articuloDB.ObtenerArticulos(-1);
            FReporte rp = new FReporte(listaArticulo, miRdlc, miNameDataSet);
            rp.Show();
        }

        #endregion

        

        


    }
}
